﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml.Linq;
using System.Net.Mail;
using System.Net;

namespace HelpDesk
{
    public partial class AsignacionIncidencia : System.Web.UI.Page
    {
        string id;
        string[] info;
        string[] datosflujo;
        QueryBuilder Consulta = new QueryBuilder();

        protected void Page_Load(object sender, EventArgs e)
        {
            id = Request.QueryString["TID"];
            if (!IsPostBack)
            {
                string sql = "Select nombres || ' ' || apellidos as usuario, email || ',' || id_usuario as data from USUARIO, PERMISO"
                               + " where usuario.permisos = Permiso.id_permiso"
                               + " and permiso.id_permiso = 2 and usuario.con_asignacion = 'N'";
                DataTable datos1 = Consulta.EjecutarQuery(sql);
                ddl_destino.DataSource = datos1;
                ddl_destino.DataBind();
                sql = "select distinct descripcion_flujo, id_flujo || ',' || id_problema as datos from flujo,problema,ticket"
                        + " where ticket.problema = problema.id_problema"
                        + " and flujo.problema = problema.id_problema"
                        + " and ticket.id_ticket = " + id;
                DataTable flujo = Consulta.EjecutarQuery(sql);
                ddl_asignaflujo.DataSource = flujo;
                ddl_asignaflujo.DataBind(); 

            }
        }

        protected void btn_asignar_Click(object sender, EventArgs e)
        {
            Utilitario util = new Utilitario();
            string usrid = "";
            MailMessage mailmsg = new MailMessage();
            info = ddl_destino.SelectedValue.ToString().Split(',');
            datosflujo = ddl_asignaflujo.SelectedValue.ToString().Split(',');
            string destinatario = info[0].ToString();
            try
            {
                string sqlusr= "select id_usuario from usuario where email='"+destinatario+"'";
                DataTable usr = Consulta.EjecutarQuery(sqlusr);
                usrid = usr.Rows[0].ItemArray[0].ToString();
            }
            catch { Response.Redirect("ErrorPage.aspx"); }
            
            mailmsg.From = new MailAddress("proyectoisc2@gmail.com", "Proyecto IS 2");
            mailmsg.Subject = util.Hacer_Espacios(usrid+":") + "Asignacion del Ticket # " + id;
            mailmsg.Body = tbx_descripcio.Text;
            mailmsg.To.Add(destinatario);


            if (!(string.IsNullOrEmpty(FileUpload1.FileName)))
            {
                mailmsg.Attachments.Add(new Attachment(FileUpload1.PostedFile.InputStream, FileUpload1.FileName));
            }

            //ahora se tiene que agregar el cliente lo que sera el host
            SmtpClient cliente = new SmtpClient("smtp.gmail.com", 587);
            //en esta linea se indica si el servidor solicita seguridad
            cliente.EnableSsl = true;
            NetworkCredential myCreds = new NetworkCredential("proyectois2c@gmail.com", "apocalipsis666");
            cliente.Credentials = myCreds;

            try
            {
                try
                {
                    QueryBuilder sTrans = new QueryBuilder();
                    string sql = "Update USUARIO set CON_ASIGNACION = 'S' where ID_USUARIO = '" + info[1].ToString() + "'";
                    sTrans.EjecutarNoQuery(sql);
                    sql = "INSERT INTO ASIG_PASO_FLUJO(fecha_asignado,usuario_encargado,flujo) values(sysdate,'" + info[1].ToString() + "'," + datosflujo[0] + ")";
                    sTrans.EjecutarNoQuery(sql);
                    sql = "INSERT INTO FLUJO_TICKET(ID_FLUJO, ID_TICKET, ID_PROBLEMA) values(" + datosflujo[0] + "," + id + "," + datosflujo[1] + ")";
                    sTrans.EjecutarNoQuery(sql);
                    sql = "UPDATE TICKET SET STATUS = 'ASG' WHERE ID_TICKET =" + id;
                    sTrans.EjecutarNoQuery(sql);
                }
                catch (Exception exe)
                {
                    lbl_mensaje.Text = exe.Message;
                    lbl_mensaje.Visible = true;
                }
                cliente.SendAsync(mailmsg, "Correo enviado exitosamente");
                lbl_mensaje.Text = "Correo enviado exitosamente";
                lbl_mensaje.Visible = true;
                Response.Redirect("DescripcionTicket.aspx?TID=" + id);
            }

            catch (Exception ex)
            {
                lbl_mensaje.Text = ex.Message;
                lbl_mensaje.Visible = true;
            }
        }

        protected void btn_cancelar_Click(object sender, EventArgs e)
        {
            Response.Redirect("DescripcionTIcket.aspx?TID=" + id);
        }

        protected void ddl_destino_SelectedIndexChanged(object sender, EventArgs e)
        {
        }

        protected void ddl_asignaflujo_SelectedIndexChanged(object sender, EventArgs e)
        {

        }
    }
}
